home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Programming / AmigaTalk / general / Process.st < prev    next >
Text File  |  2000-02-16  |  2KB  |  54 lines

  1. "--------------------------------------------------------------"
  2. " Process Class is NOT the same as an Amiga exec Process.      "
  3. " Perhaps someday, I'll make AmigaTalk Processes part of the   "
  4. " Operating System (yeah, right).                              "
  5. "--------------------------------------------------------------"
  6.  
  7. Class Process :Object
  8. [  
  9.    block
  10.       (self state == #TERMINATED)
  11.           ifTrue: [self termErr: 'block'.  ^ nil].
  12.  
  13.       <primitive 145  self 2>.
  14.       ^ self state
  15. |  
  16.    resume
  17.       (self state == #TERMINATED)
  18.           ifTrue: [self termErr: 'resume'.  ^ nil].
  19.  
  20.       <primitive 145  self 0>.
  21.       ^ self state
  22. |
  23.    suspend
  24.       (self state == #TERMINATED)
  25.           ifTrue: [self termErr: 'suspend'.  ^ nil].
  26.  
  27.       <primitive 145  self 1>.
  28.       ^ self state
  29. |
  30.    state  ! pstate !
  31.       pstate <- <primitive 146  self>.
  32.       (pstate  = 0) ifTrue: [pstate <- #READY.       ^ pstate].
  33.       (pstate  = 1) ifTrue: [pstate <- #SUSPENDED.   ^ pstate].
  34.       (pstate  = 2) ifTrue: [pstate <- #BLOCKED.     ^ pstate].
  35.       (pstate  = 3) ifTrue: [pstate <- #BLOCKED.     ^ pstate].
  36.       (pstate >= 4) ifTrue: [pstate <- #TERMINATED.  ^ pstate]
  37. |
  38.    terminate
  39.       <primitive 142  self>.
  40.       ^ self state
  41. |  
  42.    termErr: msgName
  43.       ('Cannot ',msgName,' a terminated process.') print
  44. |  
  45.    unblock
  46.       (self state == #TERMINATED)
  47.           ifTrue: [self termErr: 'unblock'.  ^ nil].
  48.  
  49.       <primitive 145  self 3>.
  50.       ^ self state
  51. |  
  52.    yield
  53.       ^ nil
  54. ]